package com.github.kezhenxu94.playground.java.interview.netease;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 构造队列
 *
 * 小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序：
 * while(!Q.empty())              //队列不空，执行循环
 * {
 *     int x=Q.front();            //取出当前队头的值x
 *     Q.pop();                 //弹出当前队头
 *     Q.push(x);               //把x放入队尾
 *     x = Q.front();              //取出这时候队头的值
 *     printf("%d\n",x);          //输出x
 *     Q.pop();                 //弹出这时候的队头
 * }
 *
 * 做取出队头的值操作的时候，并不弹出当前队头。
 * 小明同学发现，这段程序恰好按顺序输出了1,2,3,...,n。
 * 现在小明想让你构造出原始的队列，你能做到吗？
 * [注：原题样例第三行5有错，应该为3，以下已修正] 
 *
 */
public class NetEaseConstructQueue {

	public static void main(String[] args) {
		NetEaseConstructQueue sol = new NetEaseConstructQueue();	
		Scanner sc = new Scanner(System.in);
		int k = sc.nextInt();
		int[] cases = new int[k];
		for (int i = 0; i < k; i++)
			cases[i] = sc.nextInt();
		for (int i = 0; i < k; i++)
			System.out.println(Arrays.toString(sol.construct(cases[i])).replaceAll("[,\\[\\]]", ""));
		sc.close();
	}

	public int[] construct(int n) {
		if (n == 1)
			return new int[] {n};
		List<String> tags = new ArrayList<String>();
		for (int i = 0; i < n; i++)
			tags.add(String.valueOf(i));
		tags = helper(tags);
		int[] result = new int[n];
		for (int i = 0; i < tags.size(); i++) {
			result[Integer.valueOf(tags.get(i))] = i + 1;
		}
		return result;
	}

	private <T> List<T> helper(List<T> ts) {
		List<T> result = new ArrayList<T>();
		while (!ts.isEmpty()) {
			ts.add(ts.remove(0));
			result.add(ts.remove(0));
		}
		return result;
	}

}
